package org.company.ci.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.GregorianCalendar;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.company.ci.domain.Pedido;
import org.company.ci.domain.Producto;
import org.company.ci.domain.ProductoPedido;
import org.company.ci.domain.Proveedor;
import org.company.ci.domain.User;
import org.company.ci.services.PedidoService;
import org.company.ci.services.ProductoPedidoService;
import org.company.ci.services.ProveedorService;
import org.company.ci.services.ServiceFinder;

/**
 * Servlet encargado de guardar los datos de un pedido.
 * Servlet implementation class NuevoPedidoServlet
 */
public class NuevoPedidoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	private ServletConfig config;
	
	
    /**
     * @see HttpServlet#HttpServlet()
     */
    public NuevoPedidoServlet() {
        super();
        
    }

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		this.config = config;
		
		
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// se obtienen los parametros que vienen en post
		Enumeration nombres =  request.getParameterNames();
		
		Proveedor prov = new Proveedor();
		Pedido pedido = new Pedido();
		ArrayList<ProductoPedido> productos = new ArrayList<ProductoPedido>();
		
		while(nombres.hasMoreElements()){
			String parametro = (String)nombres.nextElement();
			
			
			if (parametro.contains("id_prod_")){
				// parametro del producto del pedido
				String numParam = parametro.substring(8);
				String cantProd = request.getParameter("cant_txt_"+numParam);
				String idProd = request.getParameter(parametro);
				System.out.println(idProd+" cant: "+cantProd);
				//creacion del producto
				ProductoPedido prodPedido = new ProductoPedido();
				Producto producto = new Producto();
				producto.setIdProducto(new Long(idProd));
				
				prodPedido.setProducto(producto);
				
				prodPedido.setCantidadSolicitada(Integer.valueOf(cantProd));
				prodPedido.setCantidadEntregada(0);
				
				//se agregar a la lista para su posterior alta
				productos.add(prodPedido);
				
				
			} else if (parametro.compareTo("cmb_idprov") == 0){
				//se obtiene el parametro del id del proveedor
				String idProv = request.getParameter(parametro);
				prov.setIdProveedor(new Long(idProv));
				
				System.out.println(idProv);
			}
		}
		
		// se crea el pedido con el proveedor y el usuario que realiza el pedido
		pedido.setProveedor(prov);
		pedido.setEstado(Pedido.ACTIVO);
		pedido.setFecha(new GregorianCalendar().getTime());
		
		User user = (User)request.getSession(false).getAttribute("user_login");
		pedido.setUser(user);
		
		PedidoService pedidoService =(PedidoService) ServiceFinder
				.getBean(config.getServletContext(),"pedidoService");
		ProductoPedidoService prodPedService = (ProductoPedidoService) ServiceFinder
				.getBean(config.getServletContext(),"productoPedidoService");
		
		try {
			// se guarda la informacion del pedido
			pedidoService.savePedido(pedido);
			// se guarda la asociacion de todos los productos con el pedido.
			for (ProductoPedido prodPed: productos) {
				prodPed.setIdPedido(pedido.getIdPedido());
				prodPedService.saveProductoPedido(prodPed);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		response.sendRedirect("MensajeNuevoPedidoServlet?id_pedido="+pedido.getIdPedido());
	}


}
